
package com.x52im.rbchat.logic.contact.viewmodel;

import android.util.Log;

import com.x52im.rbchat.MyApplication;

import java.util.Observer;

import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

/**
 * 用于新版好友好友请求的ViewModel实现类。
 *
 * @author JackJiang
 * @since 8.0
 */
public class FriendsReqViewModel extends ViewModel {

    private final static String TAG = FriendsReqViewModel.class.getSimpleName();

    /** 好友请求未读数变动LiveData对象（当IMClientManger中的全局好友请求未读数缓存发生改变时(可能是增加、清除等修改)，通过本对象通知ui更新） */
    private MutableLiveData<Integer> unreadCountChangedLiveData = null;

    /** 添加至IMClientManger中的全局好友请求未读数缓存的变动观察者(可能是增加、清除等修改) */
    private Observer unreadCountChangedObserver = null;

    public FriendsReqViewModel() {
        this.initLiveData();
    }

    /**
     * 本ViewModel类被回收时将要做的处理。
     */
    @Override
    protected void onCleared() {
        super.onCleared();

        Log.i(TAG, "@@@@5【FriendsReqModel】onCleared被调用了！");

        // 从IMClientManger中的全局好友请求未读数缓存上清除数据变动观察者
        if(this.unreadCountChangedObserver != null) {
            MyApplication.getInstance2().getIMClientManager().getFriendsReqProvider().removeUnreadChangedObserver(unreadCountChangedObserver);
        }
    }

    /**
     * 各liveData对象初始化。
     */
    private void initLiveData() {

        Log.i(TAG, "@@@@5【FriendsReqModel】initLiveData被调用了！");

        if (this.unreadCountChangedLiveData == null) {
            this.unreadCountChangedLiveData = new MutableLiveData<>();
        }

        // 设置IMClientManger中的全局好友请求未读数缓存的变动观察者
        if(this.unreadCountChangedObserver == null) {
            this.unreadCountChangedObserver = (o, currentUnreadCountInteger) -> {
                int unreadCount = 0;
                if (currentUnreadCountInteger != null) {
                    unreadCount = (int) currentUnreadCountInteger;
                }

                Log.i(TAG, "@@@@5【FriendsReqModel】好友请求数有变动（unreadCount="+unreadCount+"），马上通过postValue通知ui！");
                unreadCountChangedLiveData.postValue(unreadCount);
            };

            // 设置观察者
            MyApplication.getInstance2().getIMClientManager().getFriendsReqProvider().addUnreadChangedObserver(this.unreadCountChangedObserver);
            Log.i(TAG, "@@@@5【FriendsReqModel】initLiveData中.addUnreadChangedObserver(this.unreadCountChangedObserver)！");
        }
    }

    public void reloadUnreadCountData(){
        Log.i(TAG, "@@@@【FriendsReqViewModel】reloadUnreadCountData正在被调用。。。。");

        int cnt = getUnreadCount();
        // 将数据通知给观察者（以备ui刷新显示）
        if (unreadCountChangedLiveData != null) {
            unreadCountChangedLiveData.postValue(cnt);
        }
    }

    public void clearUnreadCountData(){
        Log.i(TAG, "@@@@【FriendsReqViewModel】clearUnreadCountData正在被调用。。。。");

        // 清除全局数据模型中的好友请求未读总数（记得不需要通知观察者，因为ui层会通过下面的postValue更新））
        MyApplication.getInstance2().getIMClientManager().getFriendsReqProvider().clearUnreadCount(false);
        // 重新加载好友请求总数（并通知ui层）
        reloadUnreadCountData();
    }

    public MutableLiveData<Integer> getUnreadCountChangedLiveData() {
        return unreadCountChangedLiveData;
    }

    public int getUnreadCount() {
      return MyApplication.getInstance2().getIMClientManager().getFriendsReqProvider().getUnreadCount();
    }
}
